#ifndef _CLED_MATRIX_RGB_H_
#define _CLED_MATRIX_RGB_H_

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

/*************************************************************************************************\
|        Advanced [13]                                                                            |
\*************************************************************************************************/
//effect = new BouncingBallEffect();      // 弹力球
//effect = new Bubbles();                 // 气泡
//effect = new FractalMotion();           // 分形运动
//effect = new GradientWave();            // 梯度波
//effect = new MovingPanes();             // 移动窗格
//effect = new Rain();                    // 下雨
//effect = new SmoothBlink();             // 平滑闪烁
//effect = new Spiral();                  // 螺旋
//effect = new StarryNight();             // 星空
//effect = new Sunrise();                 // 日出   // Fail
//effect = new SwirlCircles();            // 漩涡圈
//effect = new Wavy();                    // 波形的
//effect = new ZigZag();                  // 之字形的
extern void cledMatrixBouncingBallEffect_Init(void); // 弹力球
extern void cledMatrixBouncingBallEffect(const uint32_t cols, const uint32_t rows); // 弹力球
extern void cledMatrixBubbles_Init(void);            // 气泡
extern void cledMatrixBubbles(const uint32_t cols, const uint32_t rows);            // 气泡
extern void cledMatrixFractalMotion_Init(void);      // 分形运动
extern void cledMatrixFractalMotion(const uint32_t cols, const uint32_t rows);      // 分形运动
extern void cledMatrixGradientWave_Init(void);       // 梯度波
extern void cledMatrixGradientWave(const uint32_t cols, const uint32_t rows);       // 梯度波
extern void cledMatrixMovingPanes_Init(void);        // 移动窗格
extern void cledMatrixMovingPanes(const uint32_t cols, const uint32_t rows);        // 移动窗格
extern void cledMatrixRain_Init(void);               // 下雨
extern void cledMatrixRain(const uint32_t cols, const uint32_t rows);               // 下雨
extern void cledMatrixSmoothBlink_Init(void);        // 平滑闪烁
extern void cledMatrixSmoothBlink(const uint32_t cols, const uint32_t rows);        // 平滑闪烁
extern void cledMatrixSpiral_Init(void);             // 螺旋效果
extern void cledMatrixSpiral(const uint32_t cols, const uint32_t rows);             // 螺旋效果
extern void cledMatrixStarryNight_Init(void);        // 星空
extern void cledMatrixStarryNight(const uint32_t cols, const uint32_t rows);        // 星空
extern void cledMatrixSunrise_Init(void);            // 日出   // Fail
extern void cledMatrixSunrise(const uint32_t cols, const uint32_t rows);            // 日出   // Fail
extern void cledMatrixSwirlCircles_Init(void);       // 漩涡圈
extern void cledMatrixSwirlCircles(const uint32_t cols, const uint32_t rows);       // 漩涡圈
extern void cledMatrixWavy_Init(void);               // 波形的
extern void cledMatrixWavy(const uint32_t cols, const uint32_t rows);               // 波形的
extern void cledMatrixZigZag_Init(void);             // 之字形的
extern void cledMatrixZigZag(const uint32_t cols, const uint32_t rows);             // 之字形的

/*************************************************************************************************\
|        Beams [2]                                                                                |
\*************************************************************************************************/
//effect = new CrossingBeams();           // 交叉梁
//effect = new RotatingBeam();            // 旋转射束
extern void cledMatrixCrossingBeams_Init(void);      // 交叉梁
extern void cledMatrixCrossingBeams(const uint32_t cols, const uint32_t rows);      // 交叉梁
extern void cledMatrixRotatingBeam_Init(void);       // 旋转射束
extern void cledMatrixRotatingBeam(const uint32_t cols, const uint32_t rows);       // 旋转射束

/*************************************************************************************************\
|        Rainbow [9]                                                                              |
\*************************************************************************************************/
//effect = new ColorWheelEffect();        // 色轮
//effect = new CustomGradientWave();      // 自定义梯度波   // Fail
//effect = new DoubleRotatingRainbow();   // 双旋转彩虹
//effect = new Hypnotoad();               //
//effect = new NoiseMap();                // 噪声地图
//effect = new RadialRainbow();           // 径向彩虹
//effect = new RainbowWave();             // 彩虹波
//effect = new RotatingRainbow();         // 旋转的彩虹
//effect = new SpectrumCycling();         // 光谱骑自行车
extern void ColorWheel_Init(void);        // 色轮
extern void ColorWheel(const uint32_t cols, const uint32_t rows);                   // 色轮
//extern void CustomGradientWave_Init(void);         // 自定义梯度波   // Fail
//extern void CustomGradientWave(const uint32_t cols, const uint32_t rows);         // 自定义梯度波   // Fail
extern void DoubleRotatingRainbow_Init(void);        // 双旋转彩虹
extern void DoubleRotatingRainbow(const uint32_t cols, const uint32_t rows);        // 双旋转彩虹
extern void Hypnotoad_Init(void);                  // Hypnotoad
extern void Hypnotoad(const uint32_t cols, const uint32_t rows);                    // Hypnotoad
extern void NoiseMap_Init(void);                   // 噪声地图
extern void NoiseMap(const uint32_t cols, const uint32_t rows);                     // 噪声地图
extern void RadialRainbow_Init(void);                // 径向彩虹
extern void RadialRainbow(const uint32_t cols, const uint32_t rows);                // 径向彩虹
extern void RainbowWave_Init(void);                  // 彩虹波
extern void RainbowWave(const uint32_t cols, const uint32_t rows);                  // 彩虹波
extern void RotatingRainbow_Init(void);              // 旋转的彩虹
extern void RotatingRainbow(const uint32_t cols, const uint32_t rows);              // 旋转的彩虹
extern void SpectrumCycling_Init(void);              // 光谱骑自行车
extern void SpectrumCycling(const uint32_t cols, const uint32_t rows);              // 光谱骑自行车

/*************************************************************************************************\
|        Random [2]                                                                               |
\*************************************************************************************************/
//effect =  new Bloom();                  // 花朵
//effect = new Lightning();               // 闪电
extern void cledMatrixBloom_Init(void);                                             // 花朵
extern void cledMatrixBloom(const uint32_t cols, const uint32_t rows);              // 花朵
extern void cledMatrixLightning_Init(void);                                         // 闪电
extern void cledMatrixLightning(const uint32_t cols, const uint32_t rows);          // 闪电

/*************************************************************************************************\
|        Simple [11]                                                                              |
\*************************************************************************************************/
//effect = new Breathing();               // 呼吸
//effect = new BreathingCircle();         // 呼吸循环
//effect = new Comet();                   // 彗星
//effect = new Fill();                    // 充满
//effect = new Marquee();                 // 大天幕
//effect = new Mosaic();                  // 马赛克
//effect = new MotionPoint();             // 运动点
//effect = new MotionPoints();            // 运动点
//effect = new Stack();                   // 堆
//effect = new Swap();                    // 交换
//effect = new Visor();                   // 遮阳板
extern void cledMatrixBreathing_Init(void);          // 呼吸
extern void cledMatrixBreathing(const uint32_t cols, const uint32_t rows);          // 呼吸
extern void cledMatrixBreathingCircle_Init(void);    // 呼吸循环
extern void cledMatrixBreathingCircle(const uint32_t cols, const uint32_t rows);    // 呼吸循环
extern void cledMatrixComet_Init(void);              // 彗星
extern void cledMatrixComet(const uint32_t cols, const uint32_t rows);              // 彗星
extern void cledMatrixFill_Init(void);               // 充满
extern void cledMatrixFill(const uint32_t cols, const uint32_t rows);               // 充满
extern void cledMatrixMarquee_Init(void);            // 大天幕
extern void cledMatrixMarquee(const uint32_t cols, const uint32_t rows);            // 大天幕
extern void cledMatrixMosaic_Init(void);             // 马赛克
extern void cledMatrixMosaic(const uint32_t cols, const uint32_t rows);             // 马赛克
extern void cledMatrixMotionPoint_Init(void);        // 运动点
extern void cledMatrixMotionPoint(const uint32_t cols, const uint32_t rows);        // 运动点
extern void cledMatrixMotionPoints_Init(void);       // 运动点
extern void cledMatrixMotionPoints(const uint32_t cols, const uint32_t rows);       // 运动点
extern void cledMatrixStack_Init(void);              // 堆
extern void cledMatrixStack(const uint32_t cols, const uint32_t rows);              // 堆
extern void cledMatrixSwap_Init(void);               // 交换
extern void cledMatrixSwap(const uint32_t cols, const uint32_t rows);               // 交换
extern void cledMatrixVisor_Init(void);              // 遮阳板
extern void cledMatrixVisor(const uint32_t cols, const uint32_t rows);              // 遮阳板

#ifdef __cplusplus
}
#endif

#endif // _CLED_MATRIX_RGB_H_
